package ahjava.io;

import java.io.*;

public class 缓冲流复制文件 {
	public static void main(String[] args) {
		字节流复制文件();
	}

	static void 字节流复制文件() {
		File srcFile = new File(
				"C:\\Users\\Administrator\\Desktop\\胡峡进-课件\\8.计算机导论（计算机应用基础）.zip"); // 源文件对象
		File destFile = new File("testCopy.pdf"); // 目标文件对象
		if (destFile.exists()) {
			System.out.println("目标文件已存在，将会删除。");
			destFile.delete();
		}
		long t1 = System.currentTimeMillis();
		fileCopy(srcFile, destFile);
		long t2 = System.currentTimeMillis();
		destFile.delete();
		long t3 = System.currentTimeMillis();
		fileCopyBuffer(srcFile, destFile);
		long t4 = System.currentTimeMillis();
		System.out.println("外部：" + (t2-t1));
		System.out.println("外部：" + (t4-t3));
	}

	static void fileCopy(File srcFile, File destFile) {
		// 目标文件不存在才复制
		try {
			destFile.createNewFile();
			long t1 = System.currentTimeMillis();
			// 创建文件输入/输出流对象
			FileInputStream fis = new FileInputStream(srcFile);
			FileOutputStream fos = new FileOutputStream(destFile);
			// 创建字节数组，作为临时缓冲
			byte[] buf = new byte[1024];
			System.out.println("开始复制文件...");
			int len = -1;
			// 循环从文件输入流中读取数据
			while ((len = fis.read(buf)) != -1) {
				// 写入到文件输出流中
				fos.write(buf, 0, len);
			}
			System.out.println("文件复制成功！");
			fis.close(); // 关闭流
			fos.close();
			long t2 = System.currentTimeMillis();
			System.out.println("不使用缓冲流：" + (t2 - t1));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	static void fileCopyBuffer(File srcFile, File destFile) {
		// 目标文件不存在才复制
		try {
			destFile.createNewFile();
			long t1 = System.currentTimeMillis();
			// 创建文件输入/输出流对象
			FileInputStream fis = new FileInputStream(srcFile);
			FileOutputStream fos = new FileOutputStream(destFile);
			BufferedInputStream bis = new BufferedInputStream(fis);
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			// 创建字节数组，作为临时缓冲
			byte[] buf = new byte[1024];
			System.out.println("开始复制文件...");
			int len = -1;
			// 循环从文件输入流中读取数据
			while ((len = bis.read(buf)) != -1) {

				// 写入到文件输出流中
				bos.write(buf);
			}
			System.out.println("文件复制成功！");
			bis.close(); // 关闭流
			bos.close();
			long t2 = System.currentTimeMillis();
			System.out.println("使用缓冲流：" + (t2 - t1));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}